#ifndef CONFIG_H
#define CONFIG_H

#include <wx/string.h>


class DoxyBlocksConfig {
  public:

    DoxyBlocksConfig();

    // Setters and getters.
    // Comments.

    wxInt8 GetBlockComment() const { return m_iBlockComment; }


    void SetBlockComment( wxInt8 val ) { m_iBlockComment = val; }


    wxInt8 GetLineComment() const { return m_iLineComment; }


    void SetLineComment( wxInt8 val ) { m_iLineComment = val; }

    // == Doxyfile defaults. ==
    // Project.

    wxString GetProjectNumber() const { return m_sProjectNumber; }


    void SetProjectNumber( const wxString& val ) { m_sProjectNumber = val; }


    wxString GetOutputDirectory() const { return m_sOutputDirectory; }


    void SetOutputDirectory( const wxString& val ) { m_sOutputDirectory = val; }


    wxString GetOutputLanguage() const { return m_sOutputLanguage; }


    void SetOutputLanguage( const wxString& val ) { m_sOutputLanguage = val; }


    bool GetUseAutoVersion() const { return m_bUseAutoVersion; }


    void SetUseAutoVersion( bool val ) { m_bUseAutoVersion = val; }

    // Build.

    bool GetExtractAll() const { return m_bExtractAll; }


    void SetExtractAll( bool val ) { m_bExtractAll = val; }


    bool GetExtractPrivate() const { return m_bExtractPrivate; }


    void SetExtractPrivate( bool val ) { m_bExtractPrivate = val; }


    bool GetExtractStatic() const { return m_bExtractStatic; }


    void SetExtractStatic( bool val ) { m_bExtractStatic = val; }

    // Warnings.

    bool GetWarnings() const { return m_bWarnings; }


    void SetWarnings( bool val ) { m_bWarnings = val; }


    bool GetWarnIfDocError() const { return m_bWarnIfDocError; }


    void SetWarnIfDocError( bool val ) { m_bWarnIfDocError = val; }


    bool GetWarnIfUndocumented() const { return m_bWarnIfUndocumented; }


    void SetWarnIfUndocumented( bool val ) { m_bWarnIfUndocumented = val; }


    bool GetWarnNoParamdoc() const { return m_bWarnNoParamdoc; }


    void SetWarnNoParamdoc( bool val ) { m_bWarnNoParamdoc = val; }

    //  Alphabetical Class Index.

    bool GetAlphabeticalIndex() const { return m_bAlphabeticalIndex; }


    void SetAlphabeticalIndex( bool val ) { m_bAlphabeticalIndex = val; }

    // Output.

    bool GetGenerateHTML() const { return m_bGenerateHTML; }


    void SetGenerateHTML( bool val ) { m_bGenerateHTML = val; }


    bool GetGenerateHTMLHelp() const { return m_bGenerateHTMLHelp; }


    void SetGenerateHTMLHelp( bool val ) { m_bGenerateHTMLHelp = val; }


    bool GetGenerateCHI() const { return m_bGenerateCHI; }


    void SetGenerateCHI( bool val ) { m_bGenerateCHI = val; }


    bool GetBinaryTOC() const { return m_bBinaryTOC; }


    void SetBinaryTOC( bool val ) { m_bBinaryTOC = val; }


    bool GetGenerateLatex() const { return m_bGenerateLatex; }


    void SetGenerateLatex( bool val ) { m_bGenerateLatex = val; }


    bool GetGenerateRTF() const { return m_bGenerateRTF; }


    void SetGenerateRTF( bool val ) { m_bGenerateRTF = val; }


    bool GetGenerateMan() const { return m_bGenerateMan; }


    void SetGenerateMan( bool val ) { m_bGenerateMan = val; }


    bool GetGenerateXML() const { return m_bGenerateXML; }


    void SetGenerateXML( bool val ) { m_bGenerateXML = val; }


    bool GetGenerateAutogenDef() const { return m_bGenerateAutogenDef; }


    void SetGenerateAutogenDef( bool val ) { m_bGenerateAutogenDef = val; }


    bool GetGeneratePerlMod() const { return m_bGeneratePerlMod; }


    void SetGeneratePerlMod( bool val ) { m_bGeneratePerlMod = val; }

    // Pre-processor.

    bool GetEnablePreprocessing() const { return m_bEnablePreprocessing; }


    void SetEnablePreprocessing( bool val ) { m_bEnablePreprocessing = val; }

    // Dot.

    bool GetClassDiagrams() const { return m_bClassDiagrams; }


    void SetClassDiagrams( bool val ) { m_bClassDiagrams = val; }


    bool GetHaveDot() const { return m_bHaveDot; }


    void SetHaveDot( bool val ) { m_bHaveDot = val; }

    // Paths.

    wxString GetPathDoxygen() const { return m_sPathDoxygen; }


    void SetPathDoxygen( const wxString& val ) { m_sPathDoxygen = val; }


    wxString GetPathDoxywizard() const { return m_sPathDoxywizard; }


    void SetPathDoxywizard( const wxString& val ) { m_sPathDoxywizard = val; }


    wxString GetPathHHC() const { return m_sPathHHC; }


    void SetPathHHC( const wxString& val ) { m_sPathHHC = val; }


    wxString GetPathDot() const { return m_sPathDot; }


    void SetPathDot( const wxString& val ) { m_sPathDot = val; }


    wxString GetPathCHMViewer() const { return m_sPathCHMViewer; }


    void SetPathCHMViewer( const wxString& val ) { m_sPathCHMViewer = val; }

    // General Options

    bool GetOverwriteDoxyfile() const { return m_bOverwriteDoxyfile; }


    void SetOverwriteDoxyfile( bool val ) { m_bOverwriteDoxyfile = val; }


    bool GetPromptBeforeOverwriting() const { return m_bPromptBeforeOverwriting; }


    void SetPromptBeforeOverwriting( bool val ) { m_bPromptBeforeOverwriting = val; }


    bool GetUseAtInTags() const { return m_bUseAtInTags; }


    void SetUseAtInTags( bool val ) { m_bUseAtInTags = val; }


    bool GetUseInternalViewer() const { return m_bUseInternalViewer; }


    void SetLoadTemplate( bool val ) { m_bLoadTemplate = val; }


    bool GetLoadTemplate() const { return m_bLoadTemplate; }


    void SetUseInternalViewer( bool val ) { m_bUseInternalViewer = val; }


    bool GetRunHTML() const { return m_bRunHTML; }


    void SetRunHTML( bool val ) { m_bRunHTML = val; }


    bool GetRunCHM() const { return m_bRunCHM; }


    void SetRunCHM( bool val ) { m_bRunCHM = val; }

    // Config. template.
    bool ReadPrefsTemplate();
    bool WritePrefsTemplate();

  private:
    // Comment style.
    wxInt8       m_iBlockComment;               //!< Block comment type.
    wxInt8       m_iLineComment;                //!< Line comment type.
    // Doxyfile defaults.
    wxString     m_sProjectNumber;              //!< Project Number.
    wxString     m_sOutputDirectory;            //!< Output Directory.
    wxString     m_sOutputLanguage;             //!< Output Language.
    bool         m_bUseAutoVersion;             //!< Use AutoVersion version number.
    bool         m_bExtractAll;                 //!< Extract All.
    bool         m_bExtractPrivate;             //!< Extract Private.
    bool         m_bExtractStatic;              //!< Extract Static.
    bool         m_bWarnings;                   //!< Warnings.
    bool         m_bWarnIfDocError;             //!< Warn If Doc Error.
    bool         m_bWarnIfUndocumented;         //!< Warn If Undocumented.
    bool         m_bWarnNoParamdoc;             //!< Warn No Paramdoc.
    bool         m_bAlphabeticalIndex;          //!< Alphabetical Index.
    bool         m_bGenerateHTML;               //!< Generate HTML.
    bool         m_bGenerateHTMLHelp;           //!< Generate HTML Help.
    bool         m_bGenerateCHI;                //!< Generate CHI.
    bool         m_bBinaryTOC;                  //!< Generate Binary TOC.
    bool         m_bGenerateLatex;              //!< Generate Latex.
    bool         m_bGenerateRTF;                //!< Generate RTF.
    bool         m_bGenerateMan;                //!< Generate Man.
    bool         m_bGenerateXML;                //!< Generate XML.
    bool         m_bGenerateAutogenDef;         //!< Generate Autogen Def.
    bool         m_bGeneratePerlMod;            //!< Generate Perl Mod.
    bool         m_bEnablePreprocessing;        //!< Enable Preprocessing.
    bool         m_bClassDiagrams;              //!< Class Diagrams.
    bool         m_bHaveDot;                    //!< Have Dot.
    // General.
    wxString     m_sPathDoxygen;                //!< Path to Doxygen.
    wxString     m_sPathDoxywizard;             //!< Path to Doxywizard.
    wxString     m_sPathHHC;                    //!< Path to HHC.
    wxString     m_sPathDot;                    //!< Path to Dot.
    wxString     m_sPathCHMViewer;              //!< Path to CHM viewer.
    bool         m_bOverwriteDoxyfile;          //!< Overwrite the doxyfile.
    bool         m_bPromptBeforeOverwriting;    //!< Prompt before overwriting the doxyfile.
    bool         m_bUseAtInTags;                //!< Use @ in tags.
    bool         m_bLoadTemplate;               //!< Load settings template instead of using default settings.
    bool         m_bUseInternalViewer;          //!< Use internal viewer to display HTML.
    bool         m_bRunHTML;                    //!< Run HTML after compilation.
    bool         m_bRunCHM;
    // Config. defaults.
    //-------------------------
    // Comment style.

    int GetDefaultBlockComment() const { return 0; }


    int GetDefaultLineComment() const { return 0; }

    // Doxyfile defaults.

    wxString GetDefaultProjectNumber() const { return wxEmptyString; }


    bool GetDefaultUseAutoVersion() const { return false; }


    wxString GetDefaultOutputDirectory() const { return wxEmptyString; }


    wxString GetDefaultOutputLanguage() const { return wxT( "English" ); }


    bool GetDefaultExtractAll() const { return false; }


    bool GetDefaultExtractPrivate() const { return false; }


    bool GetDefaultExtractStatic() const { return false; }


    bool GetDefaultWarnings() const { return true; }


    bool GetDefaultWarnIfDocError() const { return true; }


    bool GetDefaultWarnIfUndocumented() const { return false; }


    bool GetDefaultWarnNoParamdoc() const { return true; }


    bool GetDefaultAlphabeticalIndex() const { return true; }


    bool GetDefaultGenerateHTML() const { return true; }


    bool GetDefaultGenerateHTMLHelp() const { return false; }


    bool GetDefaultGenerateCHI() const { return false; }


    bool GetDefaultBinaryTOC() const { return false; }


    bool GetDefaultGenerateLatex() const { return false; }


    bool GetDefaultGenerateRTF() const { return false; }


    bool GetDefaultGenerateMan() const { return false; }


    bool GetDefaultGenerateXML() const { return false; }


    bool GetDefaultGenerateAutogenDef() const { return false; }


    bool GetDefaultGeneratePerlMod() const { return false; }


    bool GetDefaultEnablePreprocessing() const { return true; }


    bool GetDefaultClassDiagrams() const { return false; }


    bool GetDefaultHaveDot() const { return false; }

    // General.

    wxString GetDefaultPathDoxygen() const { return wxEmptyString; }


    wxString GetDefaultPathDoxywizard() const { return wxEmptyString; }


    wxString GetDefaultPathHHC() const { return wxEmptyString; }


    wxString GetDefaultPathDot() const { return wxEmptyString; }


    wxString GetDefaultPathCHMViewer() const { return wxEmptyString; }


    bool GetDefaultOverwriteDoxyfile() const { return false; }


    bool GetDefaultPromptBeforeOverwriting() const { return false; }


    bool GetDefaultUseAtInTags() const { return false; }


    bool GetDefaultLoadTemplate() const { return false; }


    bool GetDefaultUseInternalViewer() const { return false; }


    bool GetDefaultRunHTML() const { return false; }


    bool GetDefaultRunCHM() const { return false; }
};

#endif // CONFIG_H
